---
title: การอัปเกรด dApp ของคุณสำหรับ RainbowKit v2
description: RainbowKit และ Wagmi ถูกเลื่อนระดับเป็น v2
image: guide-rainbowkit-v2.png
---

# การย้ายไปยัง RainbowKit และ Wagmi v2

ส่วนประกอบ `wagmi` และ `viem` เวอร์ชันเสถียรได้ถึง 2.x.x และมีการเปลี่ยนแปลงที่ไม่สามารถกลับได้ตามเดิม

ทำตามขั้นตอนด้านล่างเพื่อทำการย้าย

**1. อัปเกรด RainbowKit, `wagmi` และ `viem` เป็นเวอร์ชั่นล่าสุด**

```bash
npm i @rainbow-me/rainbowkit wagmi viem@2.x
```

**2. ติดตั้ง `@tanstack/react-query` ซึ่งเป็น peer dependency**

กับ Wagmi v2, [TanStack Query](https://tanstack.com/query/v5/docs/react/overview) กลายเป็น peer dependency ที่จำเป็น

ติดตั้งด้วยคำสั่งตามนี้:

```bash
npm i @tanstack/react-query
```

**3. อัปเกรดการกำหนดค่าของคุณเกี่ยวกับ RainbowKit และ Wagmi**

```diff
  import '@rainbow-me/rainbowkit/styles.css'

+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
- import { createPublicClient, http } from 'viem'
- import { WagmiConfig } from 'wagmi'
+ import { WagmiProvider, http } from 'wagmi'
- import { configureChains, createConfig } from 'wagmi'
  import { mainnet } from 'wagmi/chains'
  import { RainbowKitProvider } from '@rainbow-me/rainbowkit'
- import { getDefaultWallets, connectorsForWallets } from '@rainbow-me/rainbowkit'
+ import { getDefaultConfig } from '@rainbow-me/rainbowkit'

  /* getDefaultWallets is now optional */
- const { wallets } = getDefaultWallets({
-   appName: 'RainbowKit demo',
-   projectId: 'YOUR_PROJECT_ID',
-   chains,
- })

  /* connectorsForWallets is now optional */
- const connectors = connectorsForWallets([...wallets])

- const { chains, publicClient } = configureChains( 
-   [mainnet, sepolia], 
-   [publicProvider(), publicProvider()],
- )

- const config = createConfig({
-   autoConnect: true,
-   publicClient,
- })

  /* New API that includes Wagmi's createConfig and replaces getDefaultWallets and connectorsForWallets */
+ const config = getDefaultConfig({
+   appName: 'RainbowKit demo',
+   projectId: 'YOUR_PROJECT_ID',
+   chains: [mainnet],
+   transports: {
+     [mainnet.id]: http(),
+   },
+ })

+ const queryClient = new QueryClient()

  const App = () => {
    return (
-     <WagmiConfig config={config}>
+     <WagmiProvider config={config}>
+       <QueryClientProvider client={queryClient}>
-         <RainbowKitProvider chains={chains}>
+         <RainbowKitProvider>
            {/* Your App */}
          </RainbowKitProvider>
+       </QueryClientProvider>
-     </WagmiConfig>
+     </WagmiProvider>
    )
  }
```

**4. ตรวจสอบการเปลี่ยนแปลงที่แตกหักใน `wagmi` และ `viem`**

ถ้าคุณใช้ hook ของ `wagmi` และ action ของ `viem` ใน dApp ของคุณ คุณต้องทำตามคู่มือการย้ายไปยัง v2:

- [คู่มือการย้าย Wagmi v2](https://wagmi.sh/react/guides/migrate-from-v1-to-v2)
- [การเปลี่ยนแปลงที่สำคัญของ Viem v2](https://viem.sh/docs/migration-guide#2xx-breaking-changes)

#### การเปลี่ยนแปลงของ RainbowKit

**1. การปรับปรุงพฤติกรรมสำหรับกระเป๋าคอนเนคชั่น EIP-6963**

กระเป๋าที่สนับสนุนมาตรฐานการเชื่อมต่อ EIP-6963 ใหม่ (รวมถึง Rainbow, MetaMask และอื่น ๆ) จะปรากฏอยู่ในส่วน `ติดตั้งแล้ว` อัตโนมัติในระหว่างการเชื่อมต่อกระเป๋าเงิน. สิ่งนี้จะทำให้แน่ใจว่าผู้ใช้สามารถหากระเป๋าที่ชื่นชอบและเชื่อมต่อกับ dApps ได้โดยไม่มีข้อขัดแย้งหรือปุ่มย้อนกลับ.

นักพัฒนายังคงมีการควบคุมเต็มรูปแบบในรายชื่อกระเป๋าเงินเพื่อเน้นกระเป๋าที่ต้องการสำหรับผู้ใช้ ควรที่จะรวม `injectedWallet` และ `walletConnectWallet` ในรายการเพื่อสนับสนุนทุกแพลตฟอร์ม

**2. การกำหนดค่า Wagmi ด้วย getDefaultConfig**

API ใหม่นี้ทำให้ประสบการณ์การกำหนดค่าง่ายขึ้นและแทนที่จำเป็นต้องใช้ `createConfig` ของ Wagmi โดยตรง. การกำหนดค่าโซ่ง่ายขึ้น, รวมถึงการอนุมาน Public Providers ใน `transports`.

รายชื่อกระเป๋าเงินเริ่มต้นจะถูกเพิ่มโดยอัตโนมัติ ทำให้ไม่จำเป็นต้องใช้ `getDefaultWallets` และ `connectorsForWallets`

คุณสามารถสร้างรายการกระเป๋าของคุณเองโดยการส่งเชื่อมต่อของกระเป๋าที่นำเข้าหรือกำหนดเองไปยัง `wallets`. ไม่จำเป็นต้องมีการสร้างอินสแตนซ์กระเป๋าหรือการส่ง `projectId` และ `chains`.

```
const config = getDefaultConfig({
  appName: 'RainbowKit demo',
  projectId: 'YOUR_PROJECT_ID',
  chains: [mainnet],
  wallets: [rainbowWallet], /* optional custom wallet list */
  /* Wagmi createConfig options including `transports` are also accepted */
})
```

**3. RainbowKitProvider**

คุณไม่จำเป็นต้องส่งผ่าน `chains` ให้กับ `<RainbowKitProvider>` อีกต่อไป

```diff
- <RainbowKitProvider chains={chains}>
+ <RainbowKitProvider>
```

**4. โซ่ที่กำหนดเอง**

ประเภท `Chain` ได้รับการเปลี่ยนแปลงให้สอดคล้องกับ Wagmi v2 และยังคงรองรับข้อมูลเมตา `iconUrl` และ `iconBackground` ของ RainbowKit

```diff
+ import { Chain } from '@rainbow-me/rainbowkit'

  const avalanche = {
    id: 43_114,
    name: 'Avalanche',
    iconUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',
    iconBackground: '#fff',
    nativeCurrency: { name: 'Avalanche', symbol: 'AVAX', decimals: 18 },
    rpcUrls: {
      default: { http: ['https://api.avax.network/ext/bc/C/rpc'] },
    },
    blockExplorers: {
      default: { name: 'SnowTrace', url: 'https://snowtrace.io' },
    },
    contracts: {
      multicall3: {
        address: '0xca11bde05977b3631167028862be2a173976ca11',
        blockCreated: 11_907_934,
      },
    },
  } as const satisfies Chain
```

ตัวอย่างกับ `getDefaultConfig`:

```diff
const config = getDefaultConfig({
+ chains: [
+   avalanche, /* custom chain */
+   {
+     ...mainnet,
+     iconBackground: '#000',
+     iconUrl: 'https://example.com/icons/ethereum.png',
+   }, /* metadata overrides */
+ ],
});
```

ตัวอย่างกับ `createConfig`:

```diff
+ import { Chain } from '@rainbow-me/rainbowkit'
+ const chains: readonly [Chain, ...Chain[]] = [
+   {
+     ...mainnet,
+     iconBackground: '#000',
+     iconUrl: 'https://example.com/icons/ethereum.png',
+   },
+ ];
  const config = createConfig({
    chains,
    transports: {
      [mainnet.id]: http(),
    },
  })
```

**5. กระเป๋าที่กำหนดเอง**

ตัวเชื่อมต่อกระเป๋า RainbowKit มีการเปลี่ยนแปลงครั้งใหญ่เพื่อรองรับ Wagmi v2 อ้างอิง[เอกสารที่อัปเดตแล้ว](https://www.rainbowkit.com/docs/custom-wallets) และ[ตัวเชื่อมต่อตัวอย่าง](https://github.com/rainbow-me/rainbowkit/tree/main/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts) เพื่ออัปเกรดตัวเชื่อมต่อกระเป๋าที่กำหนดเองใน dApp ของคุณ

ตัวเชื่อมกระเป๋าตอนนี้สนับสนุนมาตรฐาน EIP-6963 โดย `rdns` prop. ตรวจสอบให้แน่ใจว่าได้ดำเนินการในรายการกระเป๋าของคุณเพื่อป้องกันการอ้างอิงซ้ำกันในกระเป๋าที่สนับสนุน EIP-6963.

> กรุณารายงานปัญหาหรือคำติชมสำหรับ RainbowKit v2 ใน GitHub [ที่นี่](https://github.com/rainbow-me/rainbowkit/issues/new/choose)
